為了讓使用者有良好的使用者體驗
像是圖太打載入太久卡住,這時我們就需要用到Mutithreading
先進先出,第一個排隊買票的人,也是第一個從隊伍中取到票離開的。
你會有個任務隊列這些Queues包含著ios的方法,大部分時間這些方法為你加入的Closures
系統把這些Queues跑過一遍把裡面的方法拉出來執行
隊列可以是 serial 一次一個或是 concurrent 同一時間多個
重要的Queue他不會同時運行兩個函數所以他會是個 serial queues
所有的UI活動必須發生在這裡
系統其實一直在背景使用Main Queues
像是 DrawRect
DispatchQueue.global().async {
//裡面是你要在背景執行的代碼
if let url = self.ImageURL{
if let imageData = NSData(contentsOf: url as URL){
DispatchQueue.main.async {
//當完成後切到mainQueues把UI搞出來
self.image = UIImage(data: imageData as Data)
}
}
}
}
User-interactive : 處理與使用者互動像是UI ,需要回應性的,以及給予回饋的優先層級
User-initiated :需要立即的效果,例如打開一個保存的文檔或當用戶點擊用戶界面的東西執行操作。工作是必需的,以便繼續的用戶交互。集中在響應速度和性能。
Utility : 需要一些時間來完成,並且不需要立即結果,例如下載或導入數據的工作。實用程序任務通常具有進度條是對用戶可見。專注於提供反應性,性能和能量效率之間的平衡。
Background : 其操作在後台和不可見的用戶,例如索引,同步和備份工作。專注於能源效率。
使用 Quality of Service (QoS)
須升級Xcode 8.1 ......
'DispatchQueue.global(qos: .background).async'